# -*- coding: utf-8 -*-
from coordinates import fromPolarToXY, fromXYToPolar
from math import fabs

def getCorrections(x):
    data = [(5000, +150, -0.04), (7000, +350, -0.08), (9000, +600, -0.14)]
    x0 = data[0][0] - data[0][1]
    y0 = data[0][1]
    a0 = data[0][2]
    x1 = data[1][0] - data[1][1]
    y1 = data[1][1]
    a1 = data[1][2]
    x2 = data[2][0] - data[2][1]
    y2 = data[2][1]
    a2 = data[2][2]
    
    if x>=x1:
        y = (x - x1) * (y2 - y1) / (x2 - x1) + y1
        a = (x - x1) * (a2 - a1) / (x2 - x1) + a1
    else:
        y = (x - x0) * (y1 - y0) / (x1 - x0) + y0
        a = (x - x0) * (a1 - a0) / (x1 - x0) + a0
        
    return round(y/10)*10, round(a,2)
    

def fromOrient(number, angle, distance):
    angle = round(angle/100.0,2)
    orient = [(13.00, 2187), (9.53, 2233), (11.23, 3980)]
    Ak = orient[number - 1][0] + angle
    Dk = orient[number - 1][1] + distance
    return Ak, round(Dk/10)*10

def dalnomer(Ak, Dk, front, height):
    
    x_op, y_op = 43275, 82230
    h_op = 130
    on = 12.00
    xk, yk = 43345, 87335
    h_knp = 148
    
    print 'дальность и угол командира', Dk, Ak 
    x, y = fromPolarToXY(xk, yk, Dk, Ak)
    Dt, At = fromXYToPolar(x_op, y_op, x, y)
    Dt = round(Dt/10)*10
    print 'дальность и угол топографические', Dt, At
    dD, dA = getCorrections(Dt)
    print 'поправки ', dD, dA
    Di, Ai = Dt + dD, At + dA
    print 'исчисленные дальность и угол', Di, Ai 
    e = 30.00 + round((height - h_op) / Dt * 10, 2)
    print 'уровень', e,'доворот', Ai - on
    # пока батарея готовится, считаем
    ky = round(Dk / Dt, 1)
    print 'коэффициент удаления', ky
    PS = fabs(Ak - At)
    print 'поправка на смещение', PS
    Wy = round(100 * PS / Dt, 2)
    print 'шаг угломера', Wy 
    print 'веер', round(front / 6 * ky, 2)

def nzr(orient,angle,distance,front,height):
    Ak, Dk = fromOrient(orient, angle , distance)
    
    x_op, y_op = 43275, 82230
    h_op = 130
    on = 12.00
    xk, yk = 43345, 87335
    h_knp = 148
    
    print 'дальность и угол командира', Dk, Ak 
    x, y = fromPolarToXY(xk, yk, Dk, Ak)
    Dt, At = fromXYToPolar(x_op, y_op, x, y)
    Dt = round(Dt/10)*10
    print 'дальность и угол топографические', Dt, At 
    dD, dA = getCorrections(Dt)
    print 'поправки ', dD, dA
    Di, Ai = Dt + dD, At + dA
    print 'исчисленные дальность и угол', Di, Ai 
    e = 30.00 + round((height - h_op) / Dt * 10, 2)
    print 'уровень', e,'доворот', Ai - on
    # пока батарея готовится, считаем
    ky = round(Dk / Dt, 1)
    print 'коэффициент удаления', ky
    PS = fabs(Ak - At)
    print 'поправка на смещение', PS
    Wy = round(100 * PS / Dt, 2)
    print 'шаг угломера', Wy
    print 'веер', round(front / 6 * ky, 2)

 
def nzr1(Ak,Dk,front,height):
    x_op, y_op = 60980, 69550
    h_op = 245
    on = 18.00
    xk, yk = 59615, 73395
    h_knp = 240
    
    print 'дальность и угол командира', Dk, Ak 
    x, y = fromPolarToXY(xk, yk, Dk, Ak)
    Dt, At = fromXYToPolar(x_op, y_op, x, y)
    Dt = round(Dt/10)*10
    print 'дальность и угол топографические', Dt, At
    e = 30.00 + round((height - h_op) / Dt * 10, 2)
    print 'уровень', e,'доворот', At - on
    # пока батарея готовится, считаем
    ky = round(Dk / Dt, 1)
    print 'коэффициент удаления', ky
    PS = At - Ak
    print 'поправка на смещение', PS
    Wy = round(100 * PS / Dt, 2)
    print 'шаг угломера', Wy
    print 'веер', round(front / 6 * ky, 2)

 